import request from './index';

/**
 * 获取用户消息列表
 */
export function getUserNotifications() {
  console.log('调用获取用户消息列表API');
  
  // 检查Token是否存在且格式有效
  const token = localStorage.getItem('token');
  if (!token) {
    console.warn('获取通知API - 未检测到token，将返回空数据');
    return Promise.resolve({ success: true, data: [] });
  }
  
  // 检查token格式是否有效
  const isValidToken = /^[A-Za-z0-9\-_=]+\.[A-Za-z0-9\-_=]+\.[A-Za-z0-9\-_.+/=]*$/.test(token);
  if (!isValidToken) {
    console.error('获取通知API - token格式无效，可能导致后端解析错误');
    localStorage.removeItem('token'); // 清除无效token
    return Promise.resolve({ success: false, message: 'Token格式无效，请重新登录', data: [] });
  }
  
  return request({
    url: '/api/notifications',
    method: 'get'
  }).then(response => {
    console.log('获取通知列表API响应详情:', JSON.stringify(response));
    console.log('通知列表第一项isRead状态:', response.data && response.data.length > 0 ? response.data[0].isRead : 'N/A');
    return response;
  }).catch(error => {
    console.error('获取通知列表失败', error);
    // 返回默认空数据，错误处理已经在request拦截器中完成
    return { success: false, message: error.message, data: [] };
  });
}

/**
 * 获取未读消息数量
 */
export function getUnreadCount() {
  console.log('调用获取未读消息数量API');
  
  // 检查Token是否存在且格式有效
  const token = localStorage.getItem('token');
  if (!token) {
    console.warn('获取未读通知数量API - 未检测到token，将返回0');
    return Promise.resolve({ success: true, data: 0 });
  }
  
  // 检查token格式是否有效
  const isValidToken = /^[A-Za-z0-9\-_=]+\.[A-Za-z0-9\-_=]+\.[A-Za-z0-9\-_.+/=]*$/.test(token);
  if (!isValidToken) {
    console.error('获取未读通知数量API - token格式无效，可能导致后端解析错误');
    localStorage.removeItem('token'); // 清除无效token
    return Promise.resolve({ success: false, message: 'Token格式无效，请重新登录', data: 0 });
  }
  
  return request({
    url: '/api/notifications/unread/count',
    method: 'get'
  }).catch(error => {
    console.error('获取未读消息数量失败', error);
    // 返回默认空数据，错误处理已经在request拦截器中完成
    return { success: false, message: error.message, data: 0 };
  });
}

/**
 * 标记消息为已读
 * @param {number} id 消息ID
 */
export function markAsRead(id) {
  console.log(`调用标记消息(${id})为已读API`);
  
  // 检查Token是否存在且格式有效
  const token = localStorage.getItem('token');
  if (!token) {
    console.warn('标记已读API - 未检测到token，将返回失败');
    return Promise.resolve({ success: false, message: '未登录，无法标记已读' });
  }
  
  return request({
    url: `/api/notifications/${id}/read`,
    method: 'put'
  }).then(response => {
    console.log(`标记消息(${id})为已读API响应:`, response);
    // 延迟1秒后重新获取所有通知，确保数据同步
    setTimeout(() => {
      console.log('将在1秒后刷新通知列表');
      getUserNotifications().then(res => {
        console.log('刷新后的通知列表:', res);
      });
    }, 1000);
    return response;
  }).catch(error => {
    console.error('标记消息已读失败', error);
    // 返回默认结果，错误处理已经在request拦截器中完成
    return { success: false, message: error.message };
  });
}

/**
 * 标记所有消息为已读
 */
export function markAllAsRead() {
  console.log('调用标记所有消息为已读API');
  return request({
    url: '/api/notifications/read/all',
    method: 'put'
  }).catch(error => {
    console.error('标记所有消息已读失败', error);
    // 返回默认结果，错误处理已经在request拦截器中完成
    return { success: false, message: error.message };
  });
}

/**
 * 删除指定消息
 * @param {number} id 消息ID
 */
export function deleteNotification(id) {
  console.log(`调用删除消息(${id})API`);
  return request({
    url: `/api/notifications/${id}`,
    method: 'delete'
  }).catch(error => {
    console.error('删除消息失败', error);
    // 返回默认结果，错误处理已经在request拦截器中完成
    return { success: false, message: error.message };
  });
}

/**
 * 清空所有消息
 */
export function clearAllNotifications() {
  console.log('调用清空所有消息API');
  return request({
    url: '/api/notifications/clear',
    method: 'delete'
  }).catch(error => {
    console.error('清空所有消息失败', error);
    // 返回默认结果，错误处理已经在request拦截器中完成
    return { success: false, message: error.message };
  });
} 